Computing systems can use a bus as a connection or communication path between computer components. A system bus or local bus, for example, can connect a processor to system memory. Typically, buses support a limited number of devices. Hence, in order to increase the number of available devices, many computing systems have multiple buses. Buses can be connected via bridges that provide a connection path between two independent buses. Bridges can allow operations or transactions to flow between buses connected to the bridge.
When a computing system is initialized, it can identify a connected bus and assign it an identifier (e.g., a bus number). The computing system can then send a probe for available devices to any connected buses. Each available device can respond to the probe by informing the computing system it is available to receive an address. The computing system can then assign addresses to the detected devices in an address assignment operation. The probe, the response to the probe, and the address assignment operation can be part of an initialization transaction for a device. The computing system can also detect when a new device is connected to the computing system and can assign an address to the new device using the initialization transaction. The computing system can keep a system list of the available devices and their respective addresses in a register.
When the computing system detects a bridge connected to a bus, it can determine that there is a second bus on the other side of the bridge, and can assign an identifier for the second bus (e.g., a bus number). The system list can be updated to include this second bus. The computing system can then probe the second bus for available devices and assign addresses to any identified devices using an initialization transaction, as described above. If another bridge is detected on the second bus, the computing system can repeat the above steps until no further bridges are detected. Once all available devices and bridges are identified, the computing system can compile a system list of all available devices and bridges, along with their respective addresses and identifiers. The computing system can send at least a portion of the system list to each bridge within the system. The portion of the system list that a bridge can receive can include a range of addresses for all devices behind the bridge that the bridge can use to identify and forward communications to devices behind it. Hence, in conventional computing systems, bridges become aware of device addresses after the computing system has identified all available devices and bridges and has assigned addresses to the available devices.